home *** CD-ROM | disk | FTP | other *** search
/ 3D Games - Real-time Rend…ng & Software Technology / 3D Games - Real-time Rendering & Software Technology.iso / flysdk / plugin / panorama / panorama.cpp next >
Encoding:
C/C++ Source or Header  |  2000-03-20  |  4.9 KB  |  219 lines

  1. #include "..\..\lib\Fly3D.h"
  2. #include "panorama.h"
  3.  
  4. panorama_desc cd_panorama;
  5.  
  6. BOOL APIENTRY DllMain(HINSTANCE hModule, 
  7.                       DWORD  ul_reason_for_call, 
  8.                       LPVOID lpReserved)
  9. {    
  10.     switch( ul_reason_for_call ) 
  11.     {
  12.     case DLL_PROCESS_ATTACH:
  13.     case DLL_THREAD_ATTACH:
  14.     case DLL_THREAD_DETACH:
  15.     case DLL_PROCESS_DETACH:
  16.         break;
  17.     }
  18.     return TRUE;
  19. }
  20.  
  21. __declspec( dllexport ) 
  22. int num_classes() 
  23. {
  24.     return 1;
  25. }
  26.  
  27. __declspec( dllexport ) 
  28. class_desc *get_class_desc(int i) 
  29. {
  30.     switch(i) 
  31.     {
  32.     case 0:
  33.         return &cd_panorama;
  34.     default: return 0;
  35.     }
  36. }
  37.  
  38. __declspec( dllexport )
  39. int fly_message(int msg,int param,void *data)
  40. {
  41.     switch(msg)
  42.     {
  43.     case FLYM_DRAWSCENE:
  44.         {
  45.         panorama *pan=0;
  46.         while( pan=(panorama *)flyengine->get_next_stock_object(pan,TYPE_PANORAMA))
  47.             pan->draw();
  48.         }
  49.         return 1;
  50.     }
  51.     return 1;
  52. }
  53.  
  54. void panorama::draw()
  55. {
  56.     if (flyengine->cam==0) return;
  57.  
  58.     vector min,max;
  59.     min.vec(-size,-size,-size);
  60.     max.vec(size,size,size);
  61.  
  62.     rotate(rot*(float)flyengine->cur_dt);
  63.  
  64.     glColor4f(color.x,color.y,color.z,color.w);
  65.     glDisable(GL_FOG);
  66.     glDisable(GL_DEPTH_TEST);
  67.     glDepthMask(GL_FALSE);
  68.  
  69.     glMatrixMode( GL_PROJECTION );
  70.     glLoadIdentity();
  71.     gluPerspective( flyengine->camangle, flyengine->aspect, size/10, size*2);
  72.     glMatrixMode( GL_MODELVIEW );
  73.     glLoadIdentity();
  74.     glMultMatrixf((float *)&flyengine->cam->mat_t);
  75.     glMultMatrixf((float *)&mat_t);
  76.  
  77.     tc->use(img[0]);
  78.     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
  79.     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);
  80.     glBegin(GL_QUADS);
  81.     glTexCoord2f(0.0f,0.0f);
  82.     glVertex3f(min.x,min.y,max.z);
  83.     glTexCoord2f(1.0f,0.0f);
  84.     glVertex3f(min.x,max.y,max.z);
  85.     glTexCoord2f(1.0f,1.0f);
  86.     glVertex3f(max.x,max.y,max.z);
  87.     glTexCoord2f(0.0f,1.0f);
  88.     glVertex3f(max.x,min.y,max.z);
  89.     glEnd();
  90.  
  91.     tc->use(img[1]);
  92.     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
  93.     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);
  94.     glBegin(GL_QUADS);
  95.     glTexCoord2f(0.0f,0.0f);
  96.     glVertex3f(min.x,max.y,min.z);
  97.     glTexCoord2f(0.0f,1.0f);
  98.     glVertex3f(min.x,min.y,min.z);
  99.     glTexCoord2f(1.0f,1.0f);
  100.     glVertex3f(max.x,min.y,min.z);
  101.     glTexCoord2f(1.0f,0.0f);
  102.     glVertex3f(max.x,max.y,min.z);
  103.     glEnd();
  104.  
  105.     tc->use(img[2]);
  106.     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
  107.     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);
  108.     glBegin(GL_QUADS);
  109.     glTexCoord2f(0.0f,1.0f);
  110.     glVertex3f(min.x,max.y,min.z);
  111.     glTexCoord2f(0.0f,0.0f);
  112.     glVertex3f(min.x,max.y,max.z);
  113.     glTexCoord2f(1.0f,0.0f);
  114.     glVertex3f(min.x,min.y,max.z);
  115.     glTexCoord2f(1.0f,1.0f);
  116.     glVertex3f(min.x,min.y,min.z);
  117.     glEnd();
  118.  
  119.     tc->use(img[3]);
  120.     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
  121.     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);
  122.     glBegin(GL_QUADS);
  123.     glTexCoord2f(0.0f,1.0f);
  124.     glVertex3f(max.x,min.y,min.z);
  125.     glTexCoord2f(0.0f,0.0f);
  126.     glVertex3f(max.x,min.y,max.z);
  127.     glTexCoord2f(1.0f,0.0f);
  128.     glVertex3f(max.x,max.y,max.z);
  129.     glTexCoord2f(1.0f,1.0f);
  130.     glVertex3f(max.x,max.y,min.z);
  131.     glEnd();
  132.  
  133.     tc->use(img[4]);
  134.     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
  135.     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);
  136.     glBegin(GL_QUADS);
  137.     glTexCoord2f(0.0f,1.0f);
  138.     glVertex3f(max.x,max.y,min.z);
  139.     glTexCoord2f(0.0f,0.0f);
  140.     glVertex3f(max.x,max.y,max.z);
  141.     glTexCoord2f(1.0f,0.0f);
  142.     glVertex3f(min.x,max.y,max.z);
  143.     glTexCoord2f(1.0f,1.0f);
  144.     glVertex3f(min.x,max.y,min.z);
  145.     glEnd();
  146.  
  147.     tc->use(img[5]);
  148.     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
  149.     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);
  150.     glBegin(GL_QUADS);
  151.     glTexCoord2f(0.0f,1.0f);
  152.     glVertex3f(min.x,min.y,min.z);
  153.     glTexCoord2f(0.0f,0.0f);
  154.     glVertex3f(min.x,min.y,max.z);
  155.     glTexCoord2f(1.0f,0.0f);
  156.     glVertex3f(max.x,min.y,max.z);
  157.     glTexCoord2f(1.0f,1.0f);
  158.     glVertex3f(max.x,min.y,min.z);
  159.     glEnd();
  160.  
  161.     glEnable(GL_DEPTH_TEST);
  162.     glDepthMask(GL_TRUE);
  163.     if (flyengine->fog) glEnable(GL_FOG);
  164. }
  165.  
  166. int panorama::get_custom_param_desc(int i,param_desc *pd)
  167. {
  168.     if (pd!=0)
  169.     switch(i)
  170.     {
  171.         case 0:
  172.             pd->type='f';
  173.             pd->data=&size;
  174.             strcpy(pd->name,"size");
  175.             break;
  176.         case 1:
  177.             pd->type='p';
  178.             pd->data=&img[0];
  179.             strcpy(pd->name,"up");
  180.             break;
  181.         case 2:
  182.             pd->type='p';
  183.             pd->data=&img[1];
  184.             strcpy(pd->name,"down");
  185.             break;
  186.         case 3:
  187.             pd->type='p';
  188.             pd->data=&img[2];
  189.             strcpy(pd->name,"left");
  190.             break;
  191.         case 4:
  192.             pd->type='p';
  193.             pd->data=&img[3];
  194.             strcpy(pd->name,"right");
  195.             break;
  196.         case 5:
  197.             pd->type='p';
  198.             pd->data=&img[4];
  199.             strcpy(pd->name,"front");
  200.             break;
  201.         case 6:
  202.             pd->type='p';
  203.             pd->data=&img[5];
  204.             strcpy(pd->name,"back");
  205.             break;
  206.         case 7:
  207.             pd->type='c';
  208.             pd->data=&color;
  209.             strcpy(pd->name,"color");
  210.             break;
  211.         case 8:
  212.             pd->type='f';
  213.             pd->data=&color.w;
  214.             strcpy(pd->name,"transp");
  215.             break;
  216.     }
  217.     return 9;
  218. }
  219.